
const jwt = require('jsonwebtoken');

const verifyAuthToken = (req, res, next) => {
    const accessToken = req.headers['authorization']; // 从请求头获取 accessToken
    const refreshToken = req.headers['pass']; // 从请求头获取 refreshToken

    let pathPass = [
        '/main/subLogin',
        '/main/passwordLogin',
        '/main/getCode',
        '/main/faceLogin',
        '/xzx/business',
        '/xzx/chongzhi',
        '/xzx/createOrder',
        '/xzx/shangchuan',
        '/xzx/uploads',
        '/xzx/putUserHead',
        '/xzx/business_user',
        '/xzx/type',
        '/xzx/shop',
        '/xzx/update',
        '/xzx/shang',
        '/xzx/unstatus',
        '/xzx/status',
        '/xzx/group',
        '/xzx/update_business',
        '/xzx/xu_uploads',
        '/xzx/putUserHead',
        '/lx/get',
        '/lx/gShop',
        '/lx/getChat',
        '/lx/updateChat'
    ]


    if(pathPass.includes(req.path)){
        return next()
    }
    
    

    if (!accessToken) {
        console.log(1111);
        
        return res.status(400).json({ msg: '身份令牌未提供！' });
    }

    // 验证 accessToken
    jwt.verify(accessToken, 'accessToken', (err, decoded) => {
        if (err) {
            if (err.name === 'TokenExpiredError') {
                // accessToken 过期，尝试使用 refreshToken 刷新
                if (!refreshToken) {
                    return res.status(400).json({ msg: 'refreshToken 未提供！' });
                }

                // 验证 refreshToken
                jwt.verify(refreshToken, 'refreshToken', (err, decoded) => {
                    if (err) {
                        return res.status(403).json({ msg: 'refreshToken 过期，请重新登录' });
                    }

                    // refreshToken 验证通过，生成新的 accessToken 和 refreshToken
                    const id = decoded.id;
                    const newAccessToken = jwt.sign({ id }, 'accessToken', { expiresIn: '6h' });
                    const newRefreshToken = jwt.sign({ id }, 'refreshToken', { expiresIn: '1d' });

                    // 返回新的令牌
                    return res.status(401).json({
                        accessToken: newAccessToken,
                        refreshToken: newRefreshToken,
                        msg: '新的令牌',
                    });
                });
            } else {
                // 其他错误（如无效 token）
                return res.status(400).json({ msg: '身份验证失败' });
            }
        } else {
            // accessToken 验证通过，将用户信息附加到请求对象
            req.user = decoded;
            next(); // 继续执行下一个中间件或路由处理函数
        }
    });
};

module.exports = verifyAuthToken;
